/*
 * seguridad.java
 * Objetivo: Clase para implemtar una capa de seguridad mediante criptografía.
 * Última fecha de modificación: 25 de Mayo de 2010
 * Autor: David Cabañero Vázquez.
 */

package enigma;

/************ IMPORTACIÓN DE LIBRERÍAS *****************/
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;


/************ ESPECIFICACIÓN DE LA CLASE ****************/

public class seguridad {

/************ ATRIBUTOS DE LA CLASE *****************/
     String Algoritmo;
     public SecretKeySpec desKey;
     public String clave;

  
  seguridad (String Algoritmo,String clave) throws NoSuchAlgorithmException{
   this.clave = clave;
   this.Algoritmo = Algoritmo;
   desKey = new SecretKeySpec(new String((this.clave.trim().concat("99999999")).substring(0, 8)).getBytes(), "DES");

  }

/*
 * Objetivo: Genera una nueva clave para el algoritmo DES a través de una semilla dada.
 * Autor: David Cabañero Vázquez.
 */
public void cambiarClave()
{
  desKey = new SecretKeySpec(new String((this.clave.trim().concat("99999999")).substring(0, 8)).getBytes(), "DES");
}

/*
 * Objetivo: Encripta un Mensaje dado con los paráetros configurados para la instancia de la clase seguridad.
 * Autor: David Cabañero Vázquez.
 * Parámetros de entrada: Recibe una cadena con el texto plano.
 * Parámetros de salida: Cadena con el texto encriptado.
 */
public String encriptar(String str) throws NoSuchPaddingException, NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {

         byte[] cadenaByte= str.getBytes("UTF8");
         Cipher cifrar = null;
         cifrar = Cipher.getInstance(Algoritmo);
         cifrar.init(Cipher.ENCRYPT_MODE, desKey);
         cifrar.init(Cipher.ENCRYPT_MODE,desKey);
         byte[] enc = cifrar.doFinal(cadenaByte);       // ciframos
         return new sun.misc.BASE64Encoder().encode(enc);
         
}


/*
 * Objetivo: Desencripta un Mensaje dado con los paráetros configurados para la instancia de la clase seguridad.
 * Autor: David Cabañero Vázquez.
 * Parámetros de entrada: Recibe una cadena con el texto encriptado.
 * Parámetros de salida: Cadena con el texto plano.
 */
public String desencriptar(String str) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
      try {
            byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);
            Cipher descifrar= Cipher.getInstance(Algoritmo);
            descifrar.init(Cipher.DECRYPT_MODE, desKey);
            byte[] cadenaByte= descifrar.doFinal(dec);
            return new String(cadenaByte, "UTF8");

            } catch (UnsupportedEncodingException e) {
            } catch (java.io.IOException e) {}

      return null;
  }

}
